home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Celestin Apprentice 7
/
Apprentice-Release7.iso
/
Environments
/
PowerFantasm™ 4.19a
/
Beginners guide
/
GUIDE EXAMPLES
/
EXAMPLE12.S
< prev
next >
Wrap
Text File
|
1997-04-01
|
3KB
|
79 lines
********************************************************************************
*EXAMPLE 12 - Vertical scroll down demonstration FOR BEGINNERS GUIDE TO MAC MC *
*AUTHOR - STUART BALL JULY 94 *
*SCREEN MUST BE SET TO 16 COLOUR MODE FOR THIS EXAMPLE *
********************************************************************************
SCREENROW: EQU $0106 *WIDTH OF EAch screen line
DEVICELIST: EQU $08A8 *THE ADDRESS OF DEVICELIST
gdPMap_offset: EQU 22
DIST: EQU 2 *VERTICAL SCROLL STEP IN PIXELS
EXAMPLE11: MOVEM.L A5-A6,-(SP) *SAVE MAC WORLD
BSR INIT *INITIALISE OUR VARIABLES
MOVE.L #49,D0
SCROLL_IT: BSR SCROLL_DOWN *SCROLL THE SCREEN DOWN BY DIST PIXELS
DBRA D0,SCROLL_IT *50 TIMES
MOVEM.L (SP)+,A5-A6 *RESTORE MAC WORLD
RTS
************************END OF EXAMPLE 12***************************************
**INIT SETS UP OUR VARIABLES
INIT: LEA MY_VARS(PC),A6 *A6 IS OUR VARIABLE POINTER
MOVE.L DEVICELIST,A0
MOVE.L (A0),A0 *POINT TO DEVICELIST
MOVE.L A0,A1 *COPY ADDRESS OF DEVICE LIST
MOVE.L gdPMap_offset(A1),A1 *A1=POINTER TO GDPMAP
MOVE.L (A1),A1 *gdPMap IN A1
MOVE.W 12(A1),LINE_LENGTH(A6) *MAX X OF SCREEN
MOVE.W 10(A1),NUMB_OF_LINES(A6) *MAX Y OF SCREEN
MOVE.L (A1),VRAM_ADDR(A6) *SAVE VRAM ABSOLUTE ADDRESS
RTS
**SCROLL_DOWN_8 SCROLLS THE SCREEN DOWN BY 8 PIXELS
**EXPECTS VRAM_ADDR,NUMB_OF_LINES AND LINE_LENGTH TO BE SET UP.
SCROLL_DOWN: MOVEM.L D2-D7/A0-A1,-(SP) *SAVE REGS
MOVE.L VRAM_ADDR(A6),A0 *START OF VRAM
MOVE.W SCREENROW,D7 *PHYSICAL LENGTH OF LINES
EXT.L D7
MOVE.W NUMB_OF_LINES(A6),D6 *LINES ON SCREEN
EXT.L D6
MULS D7,D6 *D6 = LAST LINE ON SCREEN
CLR.L D5 *FOR LINE_LENGTH
MOVE.W LINE_LENGTH(A6),D5
LSR.L #1,D5 *DIVIDE BY 2 AS EACH PIXEL IS 4 BITS
ADD.L D5,D6 *D6 = LAST PIXEL ON SCREEN (BOT RIGHT)
MOVE.L D6,A1
ADD.L A0,A1 *A1=PHYSICAL VRAM ADDR OF LAST PIXEL
MOVE.L A1,A0
MOVE.L D7,D3 *SCREENROW
SUB.L D5,D3 *SCREENROW-LINE_LENGTH
MULU #DIST,D7 *SCREENROW * SCROLL STEP
SUB.L D7,A0 *A0 = LAST PIXEL OF SOURCE LINE
MOVE.W NUMB_OF_LINES(A6),D2 *CALCULATE NUMBER OF
EXT.L D2 *LINES TO SCROLL
SUB.L #DIST+1,D2 *DIST PLUS 1 FOR DBRA
SCROLL: MOVE.L D5,D4 *LINE LENGTH IN BYTES
LSR.L #2,D4 *DIVIDED BY 4 FOR LONGS
SUBQ.L #1,D4 *CAUSE DBRA ALWAYS LOOPS ONE MORE THAN COUNT
COPY_LINE: MOVE.L -(A0),-(A1) *MOVE SOURCE LINE TO DESTINATION LINE
DBRA D4,COPY_LINE *UNTIL ALL LONGS HAVE BEEN MOVED
SUB.L D3,A0
SUB.L D3,A1 *POINT TO NEXT LINE
DBRA D2,SCROLL *MOVE ALL LINES
MOVEM.L (SP)+,D2-D7/A0-A1 *RESTORE REGS
RTS
*********************************VARIABLES FOLLOW********************************
MY_VARS: DS.B 20 SPACE FOR OUR VARIABLES
******************************OFFSETS INTO VARIABLES*****************************
NUMB_OF_LINES: RS.W 1 NUMBER OF PHYSICAL LINES ON SCREEN
VRAM_ADDR: RS.L 1 ABSOLUTE ADDRESS OF VRAM
LINE_LENGTH: RS.L 1 ACTUAL LENGTH OF EACH SCREEN LINE